# Datei ble_broadcast_1.py # Stand: 08.05.2021 # TTGO als Broadcaster: Überträgt Temperaturen, die mit dem BME280 gemessen werden. # Das zugehörige Modul Bme280.py muss in den ESP32 hochgeladen sein. # Benutze weiteren TTGO als Observer (ble_observe_1.py) # Anschlüsse: #-------------------------# # BME/P280 --- TTGO # #-------------------------# # VIN --- 3V # # GND --- G # # SCL --- 22 # # SDA --- 21 # #-------------------------# # Das Modul Bme280.py muss zunächst auf den ESP323 hochgeladen werden! # Importe und Konstanten: from machine import Pin, I2C, SPI from time import sleep import Bme280 # Original-Modul (s. o.) geringfügig modifiziert (Einheiten bei den Properties entfernt) import vga2_bold_16x16 as font1 # mit Sonderzeichen (für °) import vga1_bold_16x32 as font2 import st7789 import ubluetooth from micropython import const _ADV_TYP_NAME = const(9) _ADV_TYP_MSG = const(250) # Eigener ADV_Typ für Messages # Funktionen: def advertiser(name, msg): adv_data = b'\x02\x01\x06' name = bytes(name, 'UTF-8') adv_data = adv_data + bytearray((len(name) + 1, _ADV_TYP_NAME)) + name msg = bytes(msg, 'UTF-8') adv_data = adv_data + bytearray((len(msg)+1, _ADV_TYP_MSG)) + msg ble.gap_advertise(200000, adv_data, connectable=False) # Hauptprogramm: # Vorbereitung des Displays: spi = SPI(2, baudrate=20000000, polarity=1, sck=Pin(18), mosi=Pin(19)) display = st7789.ST7789(spi, 135, 240, reset=Pin(23, Pin.OUT), cs=Pin(5, Pin.OUT), dc=Pin(16, Pin.OUT), backlight=Pin(4, Pin.OUT), rotation=3) # Landscape display.init() display.fill(0) # loeschen; Bildschirm schwarz display.text(font2, 'Broadcaster', 10, 10, st7789.GREEN) # Überschrift # Vorbereitung des BME280: i2c = I2C(1, scl=Pin(22), sda=Pin(21), freq=10000) ble = ubluetooth.BLE() name = 'ESP32' ble.active(True) while True: bme = Bme280.BME280(i2c=i2c) temp = bme.temperature print(temp, ' °C') temp_displ = b'Temp: ' + bytes(temp, 'utf-8') + b' \xF8C ' display.text(font1, temp_displ, 10, 60) advertiser(name, temp) sleep(1)